Design Twice
「二度設計せよ」
最近めちゃくちゃ意識できている radish-miyazaki.icon
最初に考えついた設計が、最も良い選択であることは少ない
頭の良し悪しは関係ない
「賢い人は、最初から正確に設計できる」というのは誤り
複数の選択肢を検討することで、より良い結果を得ることができる
「合理的なアプローチはこれしかない!」と自信があっても考える
良くない設計になることが分かり切っている場合でも考える
このとき重視するのが、上位レイヤでの使いやすさ
他に考慮すべきこと
A のインタフェースは B のものよりも汎用的か?(汎用性) A のインタフェースは B のものよりも、より効率的に問題を解決するか?(効率性) 問題を解決するのに、たくさんのメソッドを呼び出す場合は効率的とは言えない 比較することで、より良い設計を見極めることができるようになる
最初の案か、代替案か、はたまた複数の案を組み合わせたものか
設計スキルの向上
どの選択肢も魅力的でないケースもある
追加案を考える
どのインタフェースが適切か?
どの実装が適切か?
実装の目標は、インタフェースの目標とは異なる
UI の機能
モジュール分解
etc ...
二度設計することは、多くの時間を必要としない
(相対的には)radish-miyazaki.icon
クラスなどの小さなモジュールの場合
1つの代替案を考えるのに、多くて 1〜2時間程度
実装に 数日 または数週間 かかることを考えると小さい
大きなモジュールの場合であっても、実装時間 >>> 二度設計する時間
二度設計することによる、費用対効果で十分にペイできる